ReActorでFace SwapしたあとにInstantIDを使ってリファインする
https://gyazo.com/877d8862f6e7f6dd3ec7fbeac5331cd9
ReActorは128pxの画像しか作れないのでそもそも解像度が低い
それを補うべくCodeformerやGFPGANがあるけれど肌がのっぺりしてしまう
また、基本的に仮面をかぶせているだけなので立体感にも欠ける
画像 from Pexels
使用モデル
https://gyazo.com/3c1fe88d1b5564f5f7d5025656ccc96d
🟦ベース画像入力
🟧参照画像入力
Base画像が大きすぎた場合、短辺が2000pxになるようにリサイズ
元画像が大きすぎると自動的にSEGSも大きくなり、OOMになる
ReActorでFace Swap
一応GFPGANをマックスにかけて解像度を上げている
SEGS
YOLOを使ってSEGS作成
フィルターをかけて、一番大きな顔のみDetailerに流す
Detailer
InstantIDを追加
そのうちControlNetの部分はSEGSに対してかける
リアルな肌にすべく、プロンプトやモデル・LoRAを使っているけれどまだちょっとプラスチック
サンプリングは2回回す
一回目はDenoise 0.4、二回目は 0.3
SEGSPasteノードでDetailerにかけたSEGSをリサイズされる前のBase画像に合成する
https://gyazo.com/06845846bb1f8ebe930bebfd9d037d73
解像度が違うのでフェアではないけれどまつ毛とか口紅照りが綺麗になっているだけでなく、鼻の形等構造的な部分も改善している
補いきれないReActorの弱点
真上からみたいなきついアングルからの画像はReActorが反応しきれない
Baseはおでこを出しているけれど、Ref画像は前髪があったときなどは、ReActorがBase画像にも前髪をつけてしまう
Denoise 0.4では修正しきれない
https://gyazo.com/b24dabae3368b5edccdd6721519d269c
良いことを思いついたnomadoor.icon
この場面だけじゃなくて、ReActor用の整った正面画像がない場合は結構ある
代わりに画像が複数枚あるときは、まずInstantIDを使ったtext2imageで前髪もない整った正面絵を生成 → これを使ってReActor + Refineにかければいいんでない?
ウィンクや舌を出す等の大きく変化する表情変化についていけない
InstantIDだけならプロンプトでなんとかなるかもしれないけれど、ReActorを下書きにしているためウィンクが半開きになったりする
Base画像に色が引っ張られる
肌の色なんかはBaseの色に合わせてくれたほうが嬉しいので良いが、瞳の色も引っ張られる
そもそもReActorの時点で間違っているので、目だけ口だけのDetailerを回しても良いけれどちょっとworkflowが大きくなりすぎるのであんまりやりたくない
Q&A
InstantIDだけじゃだめなんですか?
Denoise 0.4程度だとBaseの顔の特徴が残ってしまう
かといってDenoiseを上げると、InstantIDで使っているControlNetは顔の向きや位置に関してはかなりルーズなので制御できずにおかしなことになる
SDXL用のControlNet mediapipefaceなんかがあればInstantIDだけでいけるかもしれない
とはいえ割と出来には満足しておりますnomadoor.icon